package com.zhizai.zhujian.utils;

import java.math.BigDecimal;
import java.text.DecimalFormat;
import java.text.FieldPosition;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;

/**
 * 对数字的一些操作方法
 */
public class NumberUtils {

    /**
     * 按指定格式将字符串转换为一个数字对象
     */
    public static Number parse(String src, String format) {
        Number number = null;
        if (src == null || src.equals(""))
            return null;
        try {
            number = new DecimalFormat(format).parse(src);
        } catch (ParseException e) {
            e.printStackTrace();
        }
        return number;
    }

    /**
     * 将一个字符串转换为一个数字对象
     */
    public static Number parse(String src) {
        Number number = null;
        if (src == null || src.equals(""))
            return null;
        try {
            number = new DecimalFormat().parse(src);
        } catch (ParseException e) {
            e.printStackTrace();
        }
        return number;
    }

    /**
     * 将一个字符串按指定格式进行格式化
     */
    public static String format(String src, String format) {
        Number number = parse(src);
        if (number == null)
            return "";
        else
            return new DecimalFormat(format).format(number);
    }

    /**
     * 将某一数字对象按指定格式进行格式化
     */
    public static String format(Number number, String format) {
        if (number == null)
            return "";
        else
            return new DecimalFormat(format).format(number);
    }

    /**
     * 检查是否是一个合法的数字
     */
    public static boolean isNumeric(String str) {
        try {
            new DecimalFormat().parse(str);
            return true;
        } catch (ParseException e) {
            return false;
        }
    }

    /**
     * 检查是否是一个整数
     */
    public static boolean isInteger(String str) {
        try {
            Integer.valueOf(str);
            return true;
        } catch (NumberFormatException e) {
            return false;
        }
    }

    /**
     * 将一个字符串转换为整型数
     */
    public static int parseInt(String value) {
        if (value == null)
            return 0;
        try {
            return Integer.valueOf(value).intValue();
        } catch (NumberFormatException e) {
            return 0;
        }
    }

    public static String formatDouble(double d) {
        DecimalFormat df = new DecimalFormat("##.## ");
        StringBuffer sb = new StringBuffer();


        return (df.format(new BigDecimal(d), sb, new FieldPosition(0))).toString();

    }

    /**
     * 格式化为小数点后2位
     */
    public static BigDecimal formatBigDecimal(BigDecimal d) {

        if (d == null)
            return new BigDecimal(0);

        DecimalFormat df = new DecimalFormat("##.######");
        StringBuffer sb = new StringBuffer();
        String str = (df.format(d, sb, new FieldPosition(0))).toString();
        BigDecimal bigDecimal = new BigDecimal(str);

        return bigDecimal;

    }

    /**
     * 是则true, 否则false
     */
    public boolean compareNumber(String n1, String n2, String fuhao) {
        if (n1 == null || "".equals(n1)) {
            return false;
        }
        if (n2 == null || "".equals(n2)) {
            return false;
        }
        String rex = "^-?\\d+$";
        if (!n1.matches(rex)) {
            return false;
        }
        if (!n2.matches(rex)) {
            return false;
        }

        int n3 = Integer.parseInt(n1);
        int n4 = Integer.parseInt(n2);

        if ("大于".equals(fuhao)) {
            if (n3 - n4 > 0)
                return true;
            else
                return false;
        } else if ("大于等于".equals(fuhao)) {
            if (n3 - n4 >= 0)
                return true;
            else
                return false;
        } else if ("等于".equals(fuhao)) {
            if (n3 - n4 == 0)
                return true;
            else
                return false;
        } else if ("小于".equals(fuhao)) {
            if (n3 - n4 < 0)
                return true;
            else
                return false;
        } else {
            if (n3 - n4 <= 0)
                return true;
            else
                return false;
        }
    }

    /**
     * 生成四位验证码
     */
    public static int generateVerifyCode() {
        return (int) Math.round(Math.random() * (9999-1000) +1000);
    }

    /**
     * 生成11位用户流水号
     */
    public static String generateFlowCode() {
        SimpleDateFormat sdf = new SimpleDateFormat("ddHHmmss");
        return sdf.format(new Date()) + (int) (Math.random() * 900 + 100);
    }

    public static void main(String[] args) {
        for (int i = 0; i < 10; i++) {
//            System.out.println(NumberUtils.generateVerifyCode());
            System.out.println(NumberUtils.generateFlowCode());

        }
    }

}
